﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Sintaxe;
using Sintaxe.Instrucoes;
using Sintaxe.Simbolos;
//using Sintaxe.Processadores; ############################################################################

/* 
 * "Operação" é o elemento da uma instrução determinando o que esta instrução "faz"
 * Diretivas do montador são operações, códigos mnemónicos de instruções da maquina são derivados da classe Operação.
 * 
 * Convenção: ID da Diretiva começã com '.', ID do Mnemo com uma letra. Assim pode juntar coleções sem ambiguidade.
 * 
 * Entre os membros da uma operação são valores e funçoes (em campos delegate) para derivar representações da instrução 
 * em qual a operação é um atributo.
 * 
 */

public delegate void dlgMontarHori(ref Instrucao Inst);
public delegate UInt64 dlgMontarVert(UInt64 Inicio, ref Instrucao Inst);

namespace Sintaxe.Tokens
{
    public class Operacao : Token
    {
        public readonly dlgMontarHori MontarHori;
        public readonly dlgMontarVert MontarVert;
        public readonly string fmtVisu;

        // Construtor de luxo!
        //
        public Operacao(string prmID,
                        dlgMontarHori prmHori,
                        dlgMontarVert prmVert,
                        string prmFmt)
            : base(prmID)
        {
            MontarHori = prmHori;
            MontarVert = prmVert;
            fmtVisu = prmFmt;
        }

    }



}
